﻿<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:extToolkit="clr-namespace:Microsoft.Windows.Controls"
                    xmlns:local="clr-namespace:Microsoft.Windows.Controls.PropertyGrid"
                    xmlns:converters="clr-namespace:Microsoft.Windows.Controls.Core.Converters"
                    xmlns:pgConverters="clr-namespace:Microsoft.Windows.Controls.PropertyGrid.Converters"
                    xmlns:utilities="clr-namespace:Microsoft.Windows.Controls.Core.Utilities"
                    xmlns:commands="clr-namespace:Microsoft.Windows.Controls.PropertyGrid.Commands">

    <!-- =============================================================================== -->
    <!-- PropertyGrid                                                                    -->
    <!-- =============================================================================== -->

    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
    <converters:InverseBoolConverter x:Key="InverseBoolConverter" />
    <pgConverters:ExpandableObjectMarginConverter x:Key="ExpandableObjectMarginConverter" />
    <pgConverters:ValueSourceToImagePathConverter x:Key="ValueSourceToImagePathConverter" />
    <pgConverters:ValueSourceToToolTipConverter x:Key="ValueSourceToToolTipConverter" />

    <SolidColorBrush x:Key="MouseOverBorderBrush" Color="#FFFFB700" />
    <LinearGradientBrush x:Key="MouseOverBackgroundBrush" StartPoint="0,0" EndPoint="0,1" >
        <GradientStop Offset="0" Color="#FFFEFBF4" />
        <GradientStop Offset="0.19" Color="#FFFDE7CE" />
        <GradientStop Offset="0.39" Color="#FFFDDEB8" />
        <GradientStop Offset="0.39" Color="#FFFFCE6B" />
        <GradientStop Offset="0.79" Color="#FFFFDE9A" />
        <GradientStop Offset="1" Color="#FFFFEBAA" />
    </LinearGradientBrush>

    <SolidColorBrush x:Key="CheckedBorderBrush" Color="#FFC29B29" />
    <LinearGradientBrush x:Key="CheckedBackgroundBrush" StartPoint="0,0" EndPoint="0,1" >
        <GradientStop Offset="0" Color="#FFFFDCA0" />
        <GradientStop Offset="0.18" Color="#FFFFD692" />
        <GradientStop Offset="0.39" Color="#FFFFC45D" />
        <GradientStop Offset="1" Color="#FFFFD178" />
    </LinearGradientBrush>

    <SolidColorBrush x:Key="PressedBorderBrush" Color="#FFC29B29" />
    <LinearGradientBrush x:Key="PressedBackgroundBrush" StartPoint="0,0" EndPoint="0,1" >
        <GradientStop Offset="0" Color="#FFE3C085" />
        <GradientStop Offset="0.19" Color="#FFF4CC89" />
        <GradientStop Offset="0.36" Color="#FFF5C777" />
        <GradientStop Offset="0.36" Color="#FFF5BB56" />
        <GradientStop Offset="0.79" Color="#FFF4CE9A" />
        <GradientStop Offset="1" Color="#FFF3E28D" />
    </LinearGradientBrush>

    <Style x:Key="OptionsToggleButtonStyle" TargetType="{x:Type RadioButton}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
        <Setter Property="Height" Value="22" />
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="ToolTipService.InitialShowDelay" Value="900"/>
        <Setter Property="ToolTipService.ShowDuration" Value="20000"/>
        <Setter Property="ToolTipService.BetweenShowDelay" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RadioButton}">
                    <Grid SnapsToDevicePixels="True">
                        <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2"/>
                        <Border x:Name="MiddleBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2">
                            <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2" Padding="{TemplateBinding Padding}">
                                <StackPanel x:Name="StackPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                                    <ContentPresenter x:Name="Content" Content="{TemplateBinding Content}" Margin="1"
                                           RenderOptions.BitmapScalingMode="NearestNeighbor"
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                                </StackPanel>
                            </Border>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource MouseOverBackgroundBrush}"/>
                            <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource MouseOverBorderBrush}"/>
                            <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
                        </Trigger>

                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Opacity" TargetName="Content" Value="0.5"/>
                            <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E"/>
                        </Trigger>

                        <Trigger Property="IsChecked" Value="True">
                            <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource CheckedBackgroundBrush}"/>
                            <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource CheckedBorderBrush}"/>
                            <Setter Property="BorderBrush" TargetName="InnerBorder">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <GradientStop Color="#FFE7CBAD" Offset="0"/>
                                        <GradientStop Color="#FFF7D7B5" Offset="0.1"/>
                                        <GradientStop Color="#FFFFD38C" Offset="0.36"/>
                                        <GradientStop Color="#FFFFC75A" Offset="0.36"/>
                                        <GradientStop Color="#FFFFEFA5" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>

                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource PressedBackgroundBrush}"/>
                            <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource PressedBorderBrush}"/>
                            <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/>
                        </Trigger>

                        <MultiTrigger>
                            <MultiTrigger.Conditions>
                                <Condition Property="IsChecked" Value="True"/>
                                <Condition Property="IsMouseOver" Value="True"/>
                            </MultiTrigger.Conditions>
                            <Setter Property="Background" TargetName="MiddleBorder">
                                <Setter.Value>
                                    <LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
                                        <GradientStop Color="#40FFFEFE" Offset="0"/>
                                        <GradientStop Color="#40FFFEFE" Offset="0.39"/>
                                        <GradientStop Color="#20FFCE68" Offset="0.39"/>
                                        <GradientStop Color="#20FFCE68" Offset="0.69"/>
                                        <GradientStop Color="#10FFFFFF" Offset="1"/>
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </MultiTrigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="ClearFilterButtonStyle" TargetType="{x:Type Button}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="BorderBrush" Value="Transparent"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Height" Value="22" />
        <Setter Property="HorizontalContentAlignment" Value="Center"/>
        <Setter Property="ToolTipService.InitialShowDelay" Value="900"/>
        <Setter Property="ToolTipService.ShowDuration" Value="20000"/>
        <Setter Property="ToolTipService.BetweenShowDelay" Value="0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid SnapsToDevicePixels="True">
                        <Border x:Name="OuterBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="2"/>
                        <Border x:Name="MiddleBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2">
                            <Border x:Name="InnerBorder" BorderBrush="Transparent" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" CornerRadius="2" Padding="{TemplateBinding Padding}">
                                <StackPanel x:Name="StackPanel" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}">
                                    <ContentPresenter x:Name="Content" Content="{TemplateBinding Content}" Margin="1"
                                           RenderOptions.BitmapScalingMode="NearestNeighbor"
                                           VerticalAlignment="Center"
                                           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" />
                                </StackPanel>
                            </Border>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource MouseOverBackgroundBrush}"/>
                            <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource MouseOverBorderBrush}"/>
                            <Setter Property="BorderBrush" TargetName="InnerBorder" Value="#80FFFFFF"/>
                        </Trigger>

                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Opacity" TargetName="Content" Value="0.5"/>
                            <Setter Property="TextElement.Foreground" TargetName="OuterBorder" Value="#FF9E9E9E"/>
                        </Trigger>

                        <Trigger Property="IsPressed" Value="True">
                            <Setter Property="Background" TargetName="OuterBorder" Value="{StaticResource PressedBackgroundBrush}"/>
                            <Setter Property="BorderBrush" TargetName="OuterBorder" Value="{StaticResource PressedBorderBrush}"/>
                            <Setter Property="BorderBrush" TargetName="InnerBorder" Value="Transparent"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <SolidColorBrush x:Key="GlyphBrush" Color="#FF31347C"/>

    <ControlTemplate x:Key="ExpanderToggleButton" TargetType="{x:Type ToggleButton}">
        <Grid>
            <Rectangle Margin="0,0,0,0" x:Name="Rectangle" Fill="Transparent" />
            <Path HorizontalAlignment="Center" x:Name="Up_Arrow" VerticalAlignment="Center" Fill="{StaticResource GlyphBrush}" Data="M 0 0 L 4 4 L 8 0 Z" RenderTransformOrigin="0.5,0.5">
                <Path.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="1" ScaleY="1" />
                        <SkewTransform AngleX="0" AngleY="0" />
                        <RotateTransform Angle="-90" />
                        <TranslateTransform X="0" Y="0" />
                    </TransformGroup>
                </Path.RenderTransform>
            </Path>
            <Path Visibility="Collapsed" HorizontalAlignment="Center" x:Name="Down_Arrow" VerticalAlignment="Center" Fill="{StaticResource GlyphBrush}" Data="M 0 4 L 4 0 L 8 4 Z" RenderTransformOrigin="0.5,0.5">
                <Path.RenderTransform>
                    <TransformGroup>
                        <ScaleTransform ScaleX="1" ScaleY="1" />
                        <SkewTransform AngleX="0" AngleY="0" />
                        <RotateTransform Angle="135" />
                        <TranslateTransform X="0" Y="0" />
                    </TransformGroup>
                </Path.RenderTransform>
            </Path>
        </Grid>
        <ControlTemplate.Triggers>
            <Trigger Property="IsChecked" Value="true">
                <Setter Property="Visibility" Value="Visible" TargetName="Down_Arrow" />
                <Setter Property="Visibility" Value="Collapsed" TargetName="Up_Arrow" />
                <Setter Property="OpacityMask" TargetName="Down_Arrow" Value="#FF000000" />
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

    <Style x:Key="ExpanderStyle" TargetType="{x:Type Expander}">
        <Setter Property="Padding" Value="0" />
        <Setter Property="Background" Value="#FFF0F0F0" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Expander}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" x:Name="ContentRow" />
                        </Grid.RowDefinitions>
                        <Border x:Name="Border" Background="{TemplateBinding Background}" BorderBrush="#FFF0F0F0">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="20" />
                                    <ColumnDefinition Width="*" />
                                </Grid.ColumnDefinitions>
                                <ToggleButton Template="{StaticResource ExpanderToggleButton}" IsChecked="{Binding Path=IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" OverridesDefaultStyle="True"  />
                                <ContentPresenter Grid.Column="1" Margin="1" RecognizesAccessKey="True" ContentSource="Header" TextElement.FontWeight="Bold" />
                            </Grid>
                        </Border>
                        <Border Visibility="Collapsed" Grid.Row="1" x:Name="ExpandSite" Background="#FFF0F0F0" Padding="10 0 0 0">

                            <Border Background="#FFFFFF" BorderThickness="0" Margin="0" Padding="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Focusable="false" />
                            </Border>

                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="True">
                            <Setter Property="Visibility" Value="Visible" TargetName="ExpandSite" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style x:Key="PropertyExpanderStyle" TargetType="{x:Type Expander}">
        <Setter Property="Padding" Value="10 0 0 0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Expander}">
                    <Grid>
                        <Border Visibility="Collapsed" Grid.Row="1" x:Name="ExpandSite" Padding="0 0 0 0">
                            <Border BorderThickness="0" Margin="0" Padding="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                                <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
												  VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
												  Focusable="false" />
                            </Border>
                        </Border>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsExpanded" Value="True">
                            <Setter Property="Visibility" Value="Visible" TargetName="ExpandSite"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <ContextMenu x:Key="DefaultAdvancedOptionsMenu">
        <MenuItem Header="Reset Value" Command="commands:PropertyItemCommands.ResetValue" />
    </ContextMenu>

    <Style TargetType="{x:Type local:PropertyItem}">
        <Setter Property="BorderBrush" Value="#FFF0F0F0" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="Focusable" Value="True"/>
        <Setter Property="IsTabStop" Value="False" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:PropertyItem}">
                    <Border Background="White" ContextMenu="{Binding AdvancedOptionsMenu, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:PropertyGrid}}" ContextMenuService.Placement="Bottom">
                        <Grid VerticalAlignment="Center" HorizontalAlignment="Stretch">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="{Binding NameColumnWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:PropertyGrid}}}"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition />
                                <RowDefinition />
                            </Grid.RowDefinitions>

                            <Border BorderThickness="0.5" BorderBrush="#FFF0F0F0" x:Name="PART_Name">
                                <Grid Margin="2,2,2,2">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="Auto" />
                                    </Grid.ColumnDefinitions>

                                    <Grid Margin="{Binding Level, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ExpandableObjectMarginConverter}}">
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="15" />
                                            <ColumnDefinition Width="*" />
                                        </Grid.ColumnDefinitions>

                                        <Border Grid.Column="0" >
                                            <ToggleButton Template="{StaticResource ExpanderToggleButton}" OverridesDefaultStyle="True"
                                              IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}"
                                              Visibility="{Binding HasChildProperties, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}"/>
                                        </Border>

                                        <TextBlock Grid.Column="1" Text="{Binding DisplayName, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Stretch" TextTrimming="CharacterEllipsis"/>
                                    </Grid>                                    

                                    <Grid Grid.Column="1" HorizontalAlignment="Right" Margin="5,0,5,0"  Visibility="{Binding ShowAdvancedOptions, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:PropertyGrid}, Converter={StaticResource BooleanToVisibilityConverter}}"
                                          utilities:ContextMenuUtilities.OpenOnMouseLeftButtonClick="True"
                                          ContextMenu="{Binding AdvancedOptionsMenu, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=local:PropertyGrid}}" >

                                        <Image x:Name="_optionsImage" Width="11" Height="11"
                                               Source="{Binding ValueSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ValueSourceToImagePathConverter}}"
                                               ToolTip="{Binding ValueSource, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource ValueSourceToToolTipConverter}}" />
                                    </Grid>
                                </Grid>
                            </Border>

                            <Border BorderThickness="0.5" BorderBrush="#FFF0F0F0" x:Name="PART_Editor"  Grid.Column="1" Background="Transparent">
                                <ContentControl Content="{TemplateBinding Editor}" VerticalAlignment="Center" Focusable="False" IsTabStop="False" />
                            </Border>

                            <Expander x:Name="_propertyExpander" Grid.ColumnSpan="2" Grid.Row="1" IsExpanded="{TemplateBinding IsExpanded}" Style="{StaticResource PropertyExpanderStyle}" IsEnabled="True">
                                <ItemsControl ItemsSource="{Binding Properties, RelativeSource={RelativeSource TemplatedParent}}" IsTabStop="False" Focusable="False" >
                                    <ItemsControl.ItemsPanel>
                                        <ItemsPanelTemplate>
                                            <VirtualizingStackPanel />
                                        </ItemsPanelTemplate>
                                    </ItemsControl.ItemsPanel>
                                </ItemsControl>
                            </Expander>
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding IsDataBound, RelativeSource={RelativeSource Self}}" Value="True">
                            <Setter TargetName="_optionsImage" Property="Source" Value="/WPFToolkit.Extended;component/PropertyGrid/Images/Database11.png" />
                            <Setter TargetName="_optionsImage" Property="ToolTip" Value="Databinding" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding IsDynamicResource, RelativeSource={RelativeSource Self}}" Value="True">
                            <Setter TargetName="_optionsImage" Property="Source" Value="/WPFToolkit.Extended;component/PropertyGrid/Images/Resource11.png" />
                            <Setter TargetName="_optionsImage" Property="ToolTip" Value="Resource" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding HasResourceApplied, RelativeSource={RelativeSource Self}}" Value="True">
                            <Setter TargetName="_optionsImage" Property="Source" Value="/WPFToolkit.Extended;component/PropertyGrid/Images/Resource11.png" />
                            <Setter TargetName="_optionsImage" Property="ToolTip" Value="Resource" />
                        </DataTrigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="PART_Name" Property="Background" Value="#CED4DF" />
                        </Trigger>
                        <Trigger Property="IsSelected" Value="True">
                            <Setter TargetName="PART_Name" Property="Background" Value="#43577B" />
                            <Setter TargetName="PART_Name" Property="TextElement.Foreground" Value="White" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

    <Style TargetType="{x:Type local:PropertyGrid}">
        <Setter Property="AdvancedOptionsMenu" Value="{StaticResource DefaultAdvancedOptionsMenu}" />
        <Setter Property="Background" Value="#CED4DF" />
        <Setter Property="BorderBrush" Value="#43577B" />
        <Setter Property="BorderThickness" Value="1" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:PropertyGrid}">
                    <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="Auto" />
                                <RowDefinition />
                                <RowDefinition Height="5" />
                                <RowDefinition Height="Auto"/>
                            </Grid.RowDefinitions>

                            <StackPanel Orientation="Horizontal" Margin="6,2,0,4">
                                <TextBlock Text="{TemplateBinding SelectedObjectTypeName}" FontWeight="Bold"/>
                                <TextBlock Text="{TemplateBinding SelectedObjectName}" Margin="5,0,0,0" />
                            </StackPanel>

                            <Grid Grid.Row="1" Margin="4,0,4,4">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition Width="*"/>
                                </Grid.ColumnDefinitions>
                                <Grid Background="#BCC7D8" Margin="4">
                                    <StackPanel Orientation="Horizontal" Margin="1" >
                                        <RadioButton IsChecked="{Binding IsCategorized, RelativeSource={RelativeSource TemplatedParent}}" VerticalAlignment="Center" 
                                                     Style="{StaticResource OptionsToggleButtonStyle}" ToolTip="Categorized">
                                            <Image Source="/WPFToolkit.Extended;component/PropertyGrid/Images/Categorize16.png" Width="16" Height="16" />
                                        </RadioButton>
                                        <RadioButton IsChecked="{Binding IsCategorized, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource InverseBoolConverter}, Mode=OneWay}" VerticalAlignment="Center" 
                                                     Style="{StaticResource OptionsToggleButtonStyle}" ToolTip="Alphabetical">
                                            <Image Source="/WPFToolkit.Extended;component/PropertyGrid/Images/SortAscending16.png" Width="16" Height="16"/>
                                        </RadioButton>
                                    </StackPanel>
                                </Grid>

                                <Border Grid.Column="1" Margin="4,4,0,4" Background="White" BorderBrush="Gray" BorderThickness="1"  >
                                    <Grid>
                                        <Grid.ColumnDefinitions>
                                            <ColumnDefinition Width="*" />
                                            <ColumnDefinition Width="Auto" />
                                        </Grid.ColumnDefinitions>
                                        <extToolkit:WatermarkTextBox x:Name="_txtFilter" Background="Transparent" 
                                                                 Text="{Binding Filter, RelativeSource={RelativeSource TemplatedParent}, UpdateSourceTrigger=PropertyChanged}"
                                                                 Watermark="{TemplateBinding FilterWatermark}">
                                            <extToolkit:WatermarkTextBox.Style>
                                                <Style TargetType="Control">
                                                    <Setter Property="BorderThickness" Value="0" />
                                                    <Style.Triggers>
                                                        <Trigger Property="IsMouseOver" Value="True">
                                                            <Setter Property="BorderThickness" Value="1" />
                                                        </Trigger>
                                                    </Style.Triggers>
                                                </Style>
                                            </extToolkit:WatermarkTextBox.Style>

                                        </extToolkit:WatermarkTextBox>

                                        <Button Grid.Column="1" Command="commands:PropertyGridCommands.ClearFilter" Style="{StaticResource ClearFilterButtonStyle}"
                                                HorizontalAlignment="Left">
                                            <Image Source="/WPFToolkit.Extended;component/PropertyGrid/Images/ClearFilter16.png" Width="16" Height="16"/>
                                        </Button>
                                    </Grid>
                                </Border>
                            </Grid>

                            <Grid Grid.Row="2" Background="White">
                                <ScrollViewer VerticalScrollBarVisibility="Auto">
                                    <ItemsControl ItemsSource="{Binding Properties, RelativeSource={RelativeSource TemplatedParent}}" IsTabStop="False" Focusable="False" >
                                        <ItemsControl.ItemsPanel>
                                            <ItemsPanelTemplate>
                                                <VirtualizingStackPanel />
                                            </ItemsPanelTemplate>
                                        </ItemsControl.ItemsPanel>

                                        <ItemsControl.GroupStyle>
                                            <GroupStyle>
                                                <GroupStyle.ContainerStyle>
                                                    <Style TargetType="{x:Type GroupItem}">
                                                        <Setter Property="Template">
                                                            <Setter.Value>
                                                                <ControlTemplate>
                                                                    <Border Background="{TemplateBinding Background}"
                                                                            BorderBrush="{TemplateBinding BorderBrush}"
                                                                            BorderThickness="{TemplateBinding BorderThickness}">
                                                                        <Expander Header="{Binding Name}" Style="{StaticResource ExpanderStyle}" IsExpanded="True">
                                                                            <ItemsPresenter />
                                                                        </Expander>
                                                                    </Border>
                                                                </ControlTemplate>
                                                            </Setter.Value>
                                                        </Setter>
                                                    </Style>
                                                </GroupStyle.ContainerStyle>
                                            </GroupStyle>
                                        </ItemsControl.GroupStyle>

                                    </ItemsControl>
                                </ScrollViewer>

                                <Thumb x:Name="PART_DragThumb" HorizontalAlignment="Left" Width="5" Margin="6,0,0,0" Cursor="SizeWE">
                                    <Thumb.RenderTransform>
                                        <TranslateTransform X="{Binding NameColumnWidth, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:PropertyGrid}}}" />
                                    </Thumb.RenderTransform>
                                    <Thumb.Template>
                                        <ControlTemplate>
                                            <Border Background="Transparent" />
                                        </ControlTemplate>
                                    </Thumb.Template>
                                </Thumb>

                            </Grid>

                            <GridSplitter Height="3" Grid.Row="3" HorizontalAlignment="Stretch" Visibility="{Binding DisplaySummary, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}" />
                            <StackPanel Grid.Row="4" Margin="0,0,0,5" Visibility="{Binding DisplaySummary, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
                                <TextBlock Padding="2 2 2 0" FontWeight="Bold" Text="{Binding SelectedProperty.DisplayName, RelativeSource={RelativeSource TemplatedParent}}" />
                                <TextBlock Padding="5 2 2 0" TextWrapping="WrapWithOverflow" Text="{Binding SelectedProperty.Description, RelativeSource={RelativeSource TemplatedParent}}" />
                            </StackPanel>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

</ResourceDictionary>